package 双指针;

import java.util.Arrays;

/**
 * @PackageName: 双指针
 * @ClassName: LeetCode825
 * @Author: chen jinxu
 * @Date: 2022/3/24 23:32
 * @Description: //适龄的朋友
 * 在社交媒体网站上有 n 个用户。给你一个整数数组 ages ，其中 ages[i] 是第 i 个用户的年龄。
 * <p>
 * 如果下述任意一个条件为真，那么用户 x 将不会向用户 y（x != y）发送好友请求：
 * <p>
 * ages[y] <= 0.5 * ages[x] + 7
 * ages[y] > ages[x]
 * ages[y] > 100 && ages[x] < 100
 * 否则，x 将会向 y 发送一条好友请求。
 * 注意，如果 x 向 y 发送一条好友请求，y 不必也向 x 发送一条好友请求。另外，用户不会向自己发送好友请求
 * 返回在该社交媒体网站上产生的好友请求总数。
 * 输入：ages = [16,17,18]
 * 输出：2
 * 解释：产生的好友请求为 17 -> 16 ，18 -> 17 。
 * 输入：ages = [20,30,100,110,120]
 * 输出：3
 * 解释：产生的好友请求为 110 -> 100 ，120 -> 110 ，120 -> 100 。。
 */
public class LeetCode825 {
    public static void main(String[] args) {
        int[] ages = {20, 30, 100, 110, 120};
        int result = numFriendRequests(ages);
        System.out.println(result);
    }

    public static int numFriendRequests(int[] age) {
        Arrays.sort(age);
        int n = age.length;
        int ans = 0;
        for (int k = 0, i = 0, j = 0; k < n; k++) {
            while (i < k && !checkAge(age[i], age[k])) {
                i++;
            }
            if (j < k) {
                j = k;
            }
            while (j < n && checkAge(age[j], age[k])) {
                j++;
            }
            if (j > i) {
                ans += j - i - 1;
            }
        }
        return ans;
    }

    public static boolean checkAge(int x, int y) {
        if (y <= x * 0.5 + 7) {
            return false;
        }
        if (y > x) {
            return false;
        }
        if (y > 100 && x < 100) {
            return false;
        }
        return true;
    }
}
